package yamlbase

/**
  @author: weicai
  @since: 2024/4/3
  @desc: ztester yaml 结构
**/

type ParameterBuild struct {
	Name   string   `yaml:"name,omitempty"`   // 参数名称
	Type   string   `yaml:"type,omitempty"`   // 参数类型: values, int, datetime
	Start  string   `yaml:"start,omitempty"`  // 参数开始值
	End    string   `yaml:"end,omitempty"`    // 参数结束值
	Step   string   `yaml:"step,omitempty"`   // 参数步长
	Values []string `yaml:"values,omitempty"` // 参数值, 参数类型为values时使用
	Format string   `yaml:"format,omitempty"` // 参数格式: 日期格式
	Kind   string   `yaml:"kind,omitempty"`   // 参数类型: random, range
}

type RequestBuild struct {
	Name        string           `yaml:"name,omitempty"`         // 请求名称
	RequestType string           `yaml:"request_type,omitempty"` // 请求类型
	Url         string           `yaml:"url,omitempty"`          // 请求地址
	Parameters  []ParameterBuild `yaml:"parameters,omitempty"`   // 请求参数
	Weight      int              `yaml:"weight,omitempty"`       // 权重，0-100之间的值
	Kind        string           `yaml:"kind,omitempty"`         // 参数类型: http, psql
}

type ScenarioBuild struct {
	Name           string         `yaml:"name,omitempty"`            // 场景名称
	Loops          int            `yaml:"loops,omitempty"`           // 循环执行的次数
	IsMaster       bool           `yaml:"is_master,omitempty"`       // 是否是主场景
	IsSequential   bool           `yaml:"is_sequential,omitempty"`   // 是否是顺序执行
	Weight         float32        `yaml:"weight,omitempty"`          // 权重，0-100之间的值
	FixConcurrency uint8          `yaml:"fix_concurrency,omitempty"` // 固定的并发数（优先于权重）
	Sleep          []float32      `yaml:"sleep,omitempty"`           // 任务之间停顿的时间
	Requests       []RequestBuild `yaml:"requests,omitempty"`        // 请求
}

type StageBuild struct {
	Concurrency int             `yaml:"concurrency,omitempty"` // 总的并发数
	Duration    string          `yaml:"duration,omitempty"`    // 该阶段执行的时长
	SpawnRate   float32         `yaml:"spawn_rate,omitempty"`  // 该阶段的启动速率
	Scenarios   []ScenarioBuild `yaml:"scenarios,omitempty"`   // 该阶段的执行场景
}
